package web.usuarios;

import Persistencia.*;
import controladores.*;
import dominio.ComentarioEliminar;
import org.springframework.web.servlet.mvc.*;
import org.springframework.web.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.logging.*;
import java.util.*;
import org.springframework.web.servlet.view.*;

/*
 * Este controlador se encarga de listar los informes en diferentes casos,
 * de un coordinador especifico, para una sesion, todos los informes
 */

public class ControladorListarInforme implements Controller{
    protected final Log logger = LogFactory.getLog(getClass());
    ControladorInforme controlador;
    ControladorComentario controladorCom;
    ControladorSesion controladorSes;
    @Override

    public ModelAndView handleRequest(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
        String id = hsr.getParameter("id_fisio");
        String tipo = hsr.getParameter("tipo");
        controlador = new ControladorInforme();
        controladorCom = new ControladorComentario();
        controladorSes = new ControladorSesion();
        Informe inf=null;
        Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("id_fisio", id);
        if(tipo!=null&&(tipo.equals("revisar")||tipo.equals("revisarFisio"))){
            inf=controlador.encontrarInformeSes(hsr.getParameter("id_sesion"));
            if(inf!=null){
                List<Comentario> list1=controladorCom.encontrarMisComentarios(""+inf.getIdInforme(),id);
                List<String> list2=controladorCom.getEliminarComentarios();
                List<ComentarioEliminar> list3=new ArrayList();
                for(int i=0;i<list1.size();i++){
                    ComentarioEliminar a= new ComentarioEliminar();
                    a.setComent(list1.get(i));
                    a.setEliminar(list2.get(i));
                    list3.add(a);
                }
                myModel.put("informes", controlador.encontrarInformeSes(hsr.getParameter("id_sesion")));
                myModel.put("comentarios", list3);
            }
        }else{
            myModel.put("informes", controlador.encontrarMisInformes(id));
        }
        if(tipo!=null){
            if(tipo.equals("eliminar")){
                return new ModelAndView("eliminarInforme", "model", myModel);
            }else if(tipo.equals("revisar")){
                if(inf!=null){
                    return new ModelAndView("comentarInforme", "model", myModel);
                }else{
                    myModel = new HashMap<String, Object>();
                    myModel.put("id_fisio", id);
                    myModel.put("idPaciente", controladorSes.encontrarSesion(hsr.getParameter("id_sesion")).getPaciente().getIdPaciente());
                    myModel.put("tipo", "revisar");
                    return new ModelAndView("errorInforme", "model", myModel);
                }
            }else if(tipo.equals("revisarFisio")){
                if(inf!=null){
                    return new ModelAndView("comentarInforme", "model", myModel);
                }else{
                    myModel = new HashMap<String, Object>();
                    myModel.put("id_fisio", id);
                    myModel.put("idPaciente", controladorSes.encontrarSesion(hsr.getParameter("id_sesion")).getPaciente().getIdPaciente());
                    myModel.put("tipo", "revisarFisio");
                    return new ModelAndView("errorInforme", "model", myModel);
                }
            }else{
                return new ModelAndView("administrarInformes", "model", myModel);
            }
        }else{
            String idTr = hsr.getParameter("id_informe");
            Informe ob = null;
            List<Informe> obj = controlador.encontrarMisInformes(id);
            System.out.println(obj);
            if(obj!=null){
                for(int i=0;i<obj.size();i++){
                    if(idTr.equals(""+obj.get(i).getIdInforme())){
                        ob = obj.get(i);
                    }
                }
            }
            if(ob!=null){
                Map<String, Object> myMode = new HashMap<String, Object>();
                myMode.put("id_fisio", id);
                myMode.put("informes", ob);
                return new ModelAndView("modificarInforme","modInfo",myMode);
            }else{
                System.out.println("FUE NULL");
                return new ModelAndView("administrarInformes", "model",myModel);
            }
        }
    }
}
